package com.yuelao.yuelao_backend.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yuelao.yuelao_backend.config.PostgreSQLJsonbListTypeHandler;
import com.yuelao.yuelao_backend.entity.json.InteractionData;
import com.yuelao.yuelao_backend.entity.json.MediaItem;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 动态/帖子表
 */
@Data
@TableName(value = "posts", autoResultMap = true)
public class Post implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 话题ID
     */
    private Long topicId;

    /**
     * 内容
     */
    private String content;

    /**
     * 图片数组（JSON）
     */
    @TableField(typeHandler = PostgreSQLJsonbListTypeHandler.class)
    private List<String> images;

    /**
     * 视频URL
     */
    private String videoUrl;

    /**
     * 位置
     */
    private String location;

    /**
     * 纬度
     */
    private BigDecimal latitude;

    /**
     * 经度
     */
    private BigDecimal longitude;

    /**
     * 点赞数
     */
    private Integer likeCount;

    /**
     * 评论数
     */
    private Integer commentCount;

    /**
     * 分享数
     */
    private Integer shareCount;

    /**
     * 浏览数
     */
    private Integer viewCount;

    /**
     * 是否置顶
     */
    private Boolean isTop;

    /**
     * 是否热门
     */
    private Boolean isHot;

    /**
     * 状态: 0-删除, 1-正常, 2-审核中, 3-未通过
     */
    private Integer status;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
    
    /**
     * 获取交互数据（兼容方法）
     * @return 交互数据对象
     */
    public InteractionData getInteractions() {
        InteractionData data = new InteractionData();
        // 返回一个简化的InteractionData对象
        // 注意：这是一个简化实现，实际数据应从数据库中获取
        return data;
    }

    
    /**
     * 设置媒体列表（兼容方法）
     * @param mediaList 媒体项列表
     */
    public void setMedia(List<MediaItem> mediaList) {
        if (mediaList == null || mediaList.isEmpty()) {
            this.images = null;
            this.videoUrl = null;
            return;
        }
        
        List<String> imageUrls = new ArrayList<>();
        for (MediaItem item : mediaList) {
            if ("image".equals(item.getType())) {
                imageUrls.add(item.getUrl());
            } else if ("video".equals(item.getType())) {
                this.videoUrl = item.getUrl();
            }
        }
        
        if (!imageUrls.isEmpty()) {
            this.images = imageUrls;
        }
    }
}
